// PROGRAMA : SCRP1520
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : MANUTENCAO DE USUARIOS - ALTERACAO
// PROGRAMADOR: BRUNO LOPES COSTA
// DATA : 20 DE AGOSTO DE 1997
// ALTERACAO : 19/06/1999 POR SOLON MIRANDA

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrm1400;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrp1520B;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrp1520 OBJETIVO : MANUTENCAO DE USUARIOS - ALTERACAO *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/scrp1520")
public class Scrp1520 {
	Scrp1520 scrp1520Anterior;
	// Views utilizadas
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Scrm1400 scrm1400;
	Scrp1520B scrp1520B;
	// Scrp1520Report report;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	private String jSenhaArq;
	private String jHora;
	private int jData;
	private String[] jTabMes = { null, "Janeiro", "Fevereiro", "Marco", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" };
	private String faseproc = "";

	private Scrm1400 preMapas() {
		scrm1400 = new Scrm1400(true, sessao);
		scrp1520B = new Scrp1520B(true, sessao);
		sessao.getScrg001().setWVltw(12);
		sessao.getScrg001().setWFuncaow("ALTERACAO");
		scrm1400.setJfuncaoj("ALTERACAO");
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName().toUpperCase());
		scrm1400.setJtipo(2);
		return scrm1400;
	}

	public Scrp1520(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Scrm1400 scrm1400, Scrp1520B scrp1520B) {
		try {
			main(scrm1400, scrp1520B);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Scrm1400 pscrm1400, Scrp1520B pscrp1520B) {
		if (pscrm1400 == null && pscrp1520B == null) {
			primeiraVez = true;
			// scrm1400 = new Scrm1400 (primeiraVez);
			scrm1400 = preMapas();
			scrm1400.setNavegar("../scrp1520/executar");
			result.include("scrm1400", scrm1400);
			sessao.setAtributo("Scrp1520", this);
			scrm1400.setFaseproc(faseproc);
			scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pscrm1400, pscrp1520B);
		}

		scrm1400.receberTela(false, result);
		if (scrm1400.temMensagem) {
			result.include("scrm1400", scrm1400);
			sessao.setAtributo("Scrp1520", this);
			scrm1400.setFaseproc(faseproc);
			scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Scrp1500 scrp1500 = new Scrp1500(this.result, this.sessao);
			scrp1500.executar(null);
			return;
		}

		// Par�grafo: fd0()
		senhaView.consultaMatriculaNome(scrm1400.getJmatriculacadastrado(), scrm1400.getJnomecadastrado());

		if (senhaView.registrosProcessados() == 0) {
			scrm1400.enviarMensagem(null, "Usuario Nao Cadastrado no Sistema");
			faseproc = "";
			sessao.setAtributo("Scrp1520", this);
			result.include("scrm1400", scrm1400);
			scrm1400.setFaseproc(faseproc);
			scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}

		switch (faseproc) {
		case "": {
			scrm1400.setJmatriculacadastrou(senhaView.getMatAtualizador());
			scrm1400.setJmatriculacadastrado(senhaView.getMatricula());
			scrm1400.setJnomecadastrado(senhaView.getNome());
			jSenhaArq = senhaView.getSenha();
			scrm1400.setJseunivel(String.valueOf(senhaView.getNivel()));
			scrm1400.setJopcao(senhaView.getNivel());
			jData = senhaView.getDataProc();
			scrm1400.setJhoras(UtilBean.formataNumberToHoraHHMMSS(senhaView.getHoraProc()));
			scrm1400.setJdia((int) UtilBean.extraiDigitos(jData, 8, 6, 2));
			scrm1400.setJano(UtilBean.extraiDigitos(jData, 8, 0, 4) + "");
			scrm1400.setJnomedomes(jTabMes[(int) UtilBean.extraiDigitos(jData, 8, 4, 2)]);
			scrm1400.setJseuniveltxt("Seu nivel de acesso e'");
			// MOVEATTR
			// MOVEATTR
			// MOVEATTR
			// Par�grafo: fd1()
			senhaView.fecha();
			senhaView.consultaMatricula(scrm1400.getJmatriculacadastrou());

			scrm1400.enviarMensagem(null, "CLIQUE EM PROCESSAR PARA ATUALIZAR");

			if (scrm1400.getJmatriculacadastrou() == 9090909) {
				scrm1400.setJnomecadastrou("INICIALIZACAO DO SISTEMA");
			} else {
				scrm1400.setJnomecadastrou(senhaView.getNome());
			}

			senhaView.fecha();

			faseproc = "1";
			break;
		}
		case "1": {
			if (scrm1400.getJsenhacadastrado().trim().equals("")) {
				scrm1400.setJsenhacadastrado(jSenhaArq);
			}

			if (scrm1400.getJmatriculacadastrado() == 0) {
				faseproc = "";
				scrm1400.enviarMensagem("jMatriculaCadastrado", "Campo de preenchimento obrigatorio");
				sessao.setAtributo("Scrp1520", this);
				result.include("scrm1400", scrm1400);
				scrm1400.setFaseproc(faseproc);
				scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (senhaView.getMatricula() == scrm1400.getJmatriculacadastrado() && senhaView.getNome() == scrm1400.getJnomecadastrado() && senhaView.getSenha() == jSenhaArq && senhaView.getNivel() == scrm1400.getJopcao()) {
				faseproc = "";
				scrm1400.enviarMensagem(null, "'NENHUM CAMPO FOI ALTERADO");
				sessao.setAtributo("Scrp1520", this);
				result.include("scrm1400", scrm1400);
				scrm1400.setFaseproc(faseproc);
				scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			} else {
				jHora = new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime());
				jData = UtilBean.obtemDataCorrente();
				senhaView.setMatricula(scrm1400.getJmatriculacadastrado());
				senhaView.setNome(scrm1400.getJnomecadastrado());
				senhaView.setSenha(scrm1400.getJsenhacadastrado());
				senhaView.setNivel(scrm1400.getJopcao());
				senhaView.setMatAtualizador(sessao.getScrg001().getWMatriculaw());
				senhaView.setDataProc(jData);
				senhaView.setHoraProc(Integer.valueOf(jHora));
				if (scrm1400.getJconf().trim().equals("")) {
					faseproc = "1";
					scrm1400.enviarMensagem(null, "Confirme �S� ou �N�");
					sessao.setAtributo("Scrp1520", this);
					result.include("scrm1400", scrm1400);
					scrm1400.setFaseproc(faseproc);
					scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

					return;
				}

				if (!(scrm1400.getJconf().equals("S") || scrm1400.getJconf().equals("N"))) {
					scrm1400.enviarMensagem("jConf", "Confirmacao invalida");
					sessao.setAtributo("Scrp1520", this);
					result.include("scrm1400", scrm1400);
					scrm1400.setFaseproc(faseproc);
					scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}

				if (scrm1400.getJconf().equals("N")) {
					// dao.rollback();
				} else {
					senhaView.atualiza();

					preMapas();
					scrm1400.enviarMensagem(null, "ALTERACAO EFETUADA COM SUCESSO");
					// dao.commit();
				}
				faseproc = "";

			}

		}
		}

		sessao.setAtributo("Scrp1520", this);
		result.include("scrm1400", scrm1400);
		if (!result.used()) {
			scrm1400.setFaseproc(faseproc);
			scrm1400.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void restaurarEstados(Scrm1400 pscrm1400, Scrp1520B pscrp1520B) {
		this.scrp1520Anterior = (Scrp1520) sessao.getAtributo("Scrp1520");
		if (pscrm1400 != null) {
			scrm1400 = pscrm1400;
		} else {
			scrm1400 = this.scrp1520Anterior.scrm1400;
		}
		scrm1400.setSessao(sessao);
		if (pscrp1520B != null) {
			scrp1520B = pscrp1520B;
		} else {
			scrp1520B = this.scrp1520Anterior.scrp1520B;
		}
		scrp1520B.setSessao(sessao);
		this.faseproc = this.scrp1520Anterior.faseproc;
		this.jSenhaArq = this.scrp1520Anterior.jSenhaArq;
	}
}
